package extend1;
/*
    继承关系下成员变量的访问特点: 就近原则
        1. 在父类中访问 :  只能访问父类中有的成员变量,子类的访问不到
        2. 在子类中访问 : 可以访问子类自己的和父类所有非私有的成员
             特点: 遵循变量访问的就近原则
                局部位置 < 本类成员 < 本类父类成员
             this: 打破局部的约束,强制访问本类成员位置上的变量
             super:打破本类成员的约束,强制访问本类父类成员位置上的变量
        3. 在第三方类中访问 : 子类对象只能访问父类所有非私有的成员和自己本类中的成员
 */

public class Demo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.show();
        System.out.println("--------------------");

        Zi zi1 = new Zi();
        System.out.println("zi1.numZi = " + zi1.numZi);//100
        System.out.println("zi1.num = " + zi1.num);//111
        System.out.println("zi.numFu = " + zi1.numFu);//200
        System.out.println("--------------------");
        Fu fu = new Zi();
        //System.out.println("fu.numZi = " + fu.numZi);
        System.out.println("fu.numFu = " + fu.numFu);//200
        System.out.println("fu.num = " + fu.num);//222


    }
}

class Fu{
    int numFu = 200;
    int num = 222;
    private int secret = 555;

    public void show(){
        System.out.println("numFu = " + numFu);
        System.out.println("num = " + num);
        //System.out.println("numZi = " + numZi);

    }
}

class Zi extends Fu{
    int numZi = 100;
    int num = 111;

    public void show(){
        int num = 333;
        System.out.println("numFu = " + numFu);
        System.out.println("num = " + num);//333
        System.out.println("num = " + this.num);//111
        //super.变量名: 强制访问本类父类成员位置上的变量
        System.out.println("num = " + super.num);//222
        System.out.println("numZi = " + numZi);
        //System.out.println(secret);
    }
}

